package com.hn.zhijian.system.rsasdk;


import org.apache.tomcat.util.codec.binary.Base64;
import org.apache.tomcat.util.codec.binary.StringUtils;

import java.util.UUID;

/**
 * 加解密抽象基类
 *
 * @author LiuShaohai
 * @date 2018年8月3日
 * @filename AbstractSecurity.java
 * @location
 * @tags
 */
public abstract class AbstractSecurity {
	/**
	 * 获取KEY
	 * 
	 * @return 生成基于时间的32位KEY
	 */
	public String getKey32() {
		String key = UUID.randomUUID().toString().toUpperCase().replaceAll("-", "");
		return StringUtils3.leftPad(key, 32, '0');
	}

	/**
	 * 获取KEY
	 * 
	 * @return 生成基于时间的32KEY的前16位
	 */
	public byte[] getKeyBytes16() {
		return getKey32().substring(0, 16).getBytes();
	}

	/**
	 * BASE64 编码.
	 * 
	 * @param str
	 *            字符
	 * @return byte[]
	 */
	public byte[] encode(String str) {
		return encode(str.getBytes());
	}

	/**
	 * BASE64 编码.
	 * 
	 * @param bytes
	 *            字节码
	 * @return byte[]
	 */
	public byte[] encode(byte[] bytes) {
		Base64 encoder = new Base64();
		return encoder.encode(bytes);
	}

	/**
	 * BASE64 解码(to byte[]).
	 * 
	 * @param str
	 *            字符
	 * @return String 字符
	 */
	public byte[] decode(String str) {
		Base64 decoder = new Base64();
		return decoder.decode(StringUtils.getBytesUtf8(str));
	}

	/**
	 * BASE64 解码(to byte[]).
	 * 
	 * @param bytes
	 *            字节码
	 * @return byte[] 字节码
	 */
	public byte[] decode(byte[] bytes) {
		Base64 decoder = new Base64();
		return decoder.decode(bytes);
	}
}